這部分的觀念相當重要喔,大家使用 ruby 主要為了可以好好操作 rails 這個開發框架,裡面內部組成,除了前面的資料類型及邏輯判斷等,再來務必要認識的就是這些方法(Method)跟區塊(Block)的使用了。有一定的認識後進入 rails 的世界才能看懂其中的奧妙呀!
有些時候我們會重複做一些指令,如果可以簡單幾行字就能呼叫一連串的指令,然後可以重複利用在不同的地方,就是我們為什麼會要使用方法的原因啦。
如同標題我們要定義就是使用 define 這個英文的簡寫 def
來開頭,後面宣告這個方法的名稱,名稱很重要最好可以清楚表達執行內容,接著就是放入的參數及要執行的內容,最後再加上 end
結束,後面會介紹到這段def...end
的範圍稱為區塊,大概會長成這樣:
def say_hello() # 方法名為say_hello,後面括號可以不放參數
puts "hello"
end
say_hello() # 印出 hello
say_hello # 同上,可以省略括號
很多人都會搞混這部分,認為都是叫做參數。其實是:
- 參數是在定義方法時後面括號內部物件
- 引數是在呼叫使用方法時括號內所帶入的物件
def say_hello_to(name) # 放入參數name
puts "hello, #{name}" # name 所放的引數會被帶入
end
say_hello_to(Sean) # 帶入Sean作為引數,印出 hello, Sean
必須一個蘿蔔一個坑對入,如果參數有 3 個,只要引數不等於 3 個都是會出錯的!!
def add(a,b,c)
a + b + c
end
add (1,2) # 出錯,少一個
add (1,2,3,4) # 出錯,多一個
方法的參數可以用 "=" 先預設好喔
def say_hello_to(name ="Ken") # 預設name為"Ken"
puts "hello, #{name}"
end
say_hello_to(Sean) # 印出 hello, Sean
say_hello_to() # 有預設如果沒引數會自動帶入預設"Ken"作為引數,印出 hello, Ken
從前面的例子如果有注意到其實方法的最後一行就是所謂的回傳值,注意特別的是 Ruby 中 return 可以適時的省略,自動回傳最後一行。
比較需要注意很多人以為用 puts 印出就表示回傳了,其實 puts 是沒有回傳值的,沒回傳就會回傳 nil。
# puts沒有回傳
def double_num(num)
puts num * 2 # 印出 2 倍的值,但其實是沒有回傳值的
end
p double_num(5) # 會印出什麼?答案是 10 跟 nil 喔!!
# 回傳值
def double_num(num)
return num * 2 # 回傳 num*2 ,可以省略return
end
p double_num(5) # 印出 10
def is_adult?(age)
if age >= 18
return true
else
return false
end
end
list = [1,4,3,2]
p list.sort # 排序但不改變原本陣列,印出[1,2,3,4]
p list # 原本陣列還是印 [1,4,3,2]
p list.sort! # 排序但改變原本陣列 [1,2,3,4]
p list # 原本陣列改成 [1,2,3,4]
以上針對方法得簡單介紹,嘗試著把好用常用到的方法包起來,需要使用再呼叫出來吧!!
參考資料: